package com.cskaoyan.basic;

/*

       比如说，在我们的项目中，根据我们的业务逻辑，我们需要对两种类型的异常分开处理
       a. 基本数据类型产生的错误， 比如说除零异常
       b. 引用类型的数据产生的错误， 比如空指针，数组越界异常

       所以，为了在这种场景下，我们希望一个catch异常分支，同时处理多种类型的异常
       catch (异常类型1 | 异常类型2 | 异常类型3 | ...) {
       }

 */
public class Demo5HandleSupplement {

    public static void main(String[] args) {

        try {
            int i = 1;
            int j = 0;
            // 这里会出现除零异常
            int result = i / j;
            System.out.println("after / by zero");

            int[] array = new int[3];
            // 数组越界异常
            System.out.println(array[3]);
            System.out.println("after ArrayIndexOutOfBounds Exception");


            array = null;
            // 空指针异常
            //System.out.println(array[0]);
            System.out.println("after NullPointer Exception");

            // 如果说在接下来的代码中，还有另外一种类型的异常

        } catch (ArithmeticException e) {
            System.out.println("处理基本数据类型的错误");
        } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {
            // 针对引用类型的错误处理逻辑
            System.out.println("处理引用类型数据错误");
        }

        System.out.println("after try-catch");
    }
}
